package agenda.datos;

import java.util.ArrayList;
import java.util.Scanner;
 
public class Menu {
    
    private AgendaEx miAgenda;
    
    private GeneradorXML  miGeneradorXml ;    
    
    public static void main(String[] args) {
	Menu miMenu = new Menu();
	miMenu.ejecutar();
    }

    private void ejecutar() {
	miAgenda = new AgendaEx();
	miAgenda.procesarTxt();
	llamaMenu();
    }

    public void buscarRegistro() {
	String nombre = solicitaDatos("Nombre : ");
	try {
	//EntradaEx[] registro = miAgenda.buscar(nombre);

	    ArrayList<Entrada> registro = miAgenda.buscar(nombre);   
	  //EntradaEx registro   = miAgenda.buscar(nombre) ;
	  
	    
	//if (registro == null) {
	//    System.out.print("No se ha encontrado !!!");
	//} else {
	    //for (int i = 0; i < registro.length; i++) {
	    for (Entrada e:registro) {
		muestraDatosEntrada(e);
	    } 
	} catch (ExcepcionEntradaNoEncontrada e){
		System.out.println(e.getMessage());
	    }
	}
    
    public void buscarRegistroPorDir() {
	String Direccion = solicitaDatos("Direccion : ");
	ArrayList<EntradaEx> registro = miAgenda.buscarDireccion(Direccion);
	if (registro == null) {
	    System.out.print("No se ha encontrado !!!");
	} else {
	    for (EntradaEx e:registro) {
		muestraDatosEntrada(e);
	    }
	}
    }

    public String solicitaDatos(String titulo) {
	Scanner scan = new Scanner(System.in);
	System.out.print(titulo + "  ");
	return scan.nextLine();
    }

    public void muestraDatosEntrada(Entrada registro) {
	if (registro != null) {
	    System.out.println(registro) ;
	}
    }

    public void listar() {
	ArrayList<Entrada> listaEntrada= new ArrayList<>();
	try {
	    listaEntrada = miAgenda.listarEntradas();
	} catch (ExcepcionAgendaVacia e1) {
	    // TODO Auto-generated catch block
	    e1.printStackTrace();
	}
	imprimeCabecera();
/*	if (listaEntrada == null) {
	    System.out.println("No hay entradas.");
	} else {
	    for (int i = 0; i < listaEntrada.length; i++) {
		imprimeEntrada(listaEntrada[i]);
	    }
	}*/
	for (Entrada e:listaEntrada)
	{imprimeEntrada(e);}
    }

    public void imprimeCabecera() {
	System.out.println("Nombre\tApellidos\tTelefono");
    }

    public void imprimeEntrada(Entrada e) {
	System.out.println(e.toString()) ;
    }



    public void generaFichero() {
	GeneradorXML miGeneradorXml = new GeneradorXML();
	miGeneradorXml.procesar (miAgenda);
    }
    public void generaFicheroTxt() {
	GuardarDatos miGuardarDatos = new GuardarDatos();
	miGuardarDatos.procesar (miAgenda);
	System.out.println("Fichero generado");
    }   
    
    public void llamaMenu() {
	EntradaEx reg;	
		
	Scanner scanner = new Scanner(System.in);
	OpcionesMenu opcion=OpcionesMenu.SALIR;
	do {
	    mostrarMenu();
	    opcion = OpcionesMenu.values()[scanner.nextInt()];
	    switch (opcion) {
	    case NUEVA:
		int opcion2;		
		System.out.println("Elige la opcion:");
		System.out.println("10.-Persona");
		System.out.println("20.-Empresa");
		System.out.println("30.-Volver");
		do {
		    opcion2 = scanner.nextInt();
		    switch (opcion2) {
		    case 10:
			String nombre = solicitaDatos("Nombre");
			String apellido = solicitaDatos("Apellidos");
			String tf = solicitaDatos("Telefono");
			String direccion = solicitaDatos ("Direccion") ;
			int edad=(Integer.parseInt( solicitaDatos ("Edad")  ));
			reg  = new   PersonaEx(nombre, tf, direccion, apellido, edad) ;
			miAgenda.nueva(reg);
			break;
		    case 20:
			String nombre2 = solicitaDatos("Nombre");

			String tf2 = solicitaDatos("Telefono");
			String direccion2 = solicitaDatos("Direccion") ;
			reg  = new  EmpresaEx ( nombre2, tf2, direccion2);
			miAgenda.nueva(reg);
			break;
		    }
		} while (opcion2 != 30);
		
		break;
	    case LISTAR:
		//System.out.println("2.-Listar entradas");
		listar();
		break;
	    case BUSCAR:
		//System.out.println("3.-Buscar entradas");
		buscarRegistro();
		break;
	    case XML:
		//System.out.println("4.-Genera Fichero");
		generaFicheroTxt();
		break;
	    case BUSCAR_DIR:
		//System.out.println("4.-Genera Fichero");
		buscarRegistroPorDir();
		break;
	    }
	} while (opcion != OpcionesMenu.SALIR);
    }
 
    private void mostrarMenu() {
	for( OpcionesMenu opcion:OpcionesMenu.values()){
	    System.out.println(opcion.ordinal()+"- "+opcion.Comentario);
	}
    }
enum OpcionesMenu {
    SALIR("Salir"),
    NUEVA("Nueva entrada"),
    LISTAR("Listar agenda"),
    BUSCAR("Buscar por nombre"),
    BUSCAR_DIR("Buscar por direccion"),
    XML("Generar XML");

 ;
    String Comentario;
    OpcionesMenu(String Comentario) {
	this.Comentario=Comentario;
    }
    public String getComentario(){
	return Comentario;
    }
} 

}
